In [1]:
%pylab inline
import numpy as np # convert list to array
import matplotlib.pyplot as plt
from ipywidgets import * #interaktivitáshoz szükséges függvények
from mpl_toolkits.mplot3d import * #3D-s ábrák alcsomagja
#from scipy import special
from scipy.special import jn,fresnel
from scipy.integrate import * # az integráló rutinok betöltése
%pylab is deprecated, use %matplotlib inline and import the required libraries. Populating the interactive namespace from numpy and matplotlib
Fresnel-diffrakció ¶
In [2]:
# Az abra kimentesehez az alabbiakat a plt.show() ele kell tenni!!!
#savefig('fig_rainbow_p2_1ray.pdf'); # Abra kimentese
#savefig('fig_rainbow_p2_1ray.eps'); # Abra kimentese
# Abra es fontmeretek
xfig_meret= 9 # 12 nagy abrahoz
yfig_meret= 6 # 12 nagy abrahoz
xyticks_meret= 15 # 20 nagy abrahoz
xylabel_meret= 20 # 30 nagy abrahoz
legend_meret= 17 # 30 nagy abrahoz
In [3]:
def diffraction_el(x,lamL):
s,c=fresnel(-x*sqrt(2/lamL))
tmp= 0.5*(1+1j) - (c+s*1j)
return(tmp,0.5*abs(tmp)**2) # 2-es faktor elteres a jegyzethez kepest!
In [4]:
def single_slit(x, F):
eta_p=sqrt(2*F)*(1/2-x)
eta_m=-sqrt(2*F)*(1/2+x)
sp,cp=fresnel(eta_p)
sm,cm=fresnel(eta_m)
tmp=(cp+1j*sp-(cm+1j*sm))/sqrt(2)
return(tmp,abs(tmp)**2)
In [5]:
# a very simple solution to vectorizing the heaviside function
# http://hplgit.github.io/primer.html/doc/pub/plot/._plot-solarized005.html
def stepfn(x):
return x >= 0
In [6]:
'''
Poisson-folt
'''
def fr(t,r,u):
# r az ernyon a kozeppontol valo tavolsag, 'a' sugar egysegekben.
# u=ka^2/L parameter.
tmp=real(t*exp(1j*u*t**2/2)*jn(0,r*u*t))
return(tmp)
def fi(t,r,u):
# r az ernyon a kozeppontol valo tavolsag, 'a' sugar egysegekben.
# u=ka^2/L parameter.
tmp=imag(t*exp(1j*u*t**2/2)*jn(0,r*u*t))
return(tmp)
def ukorong(r,ka,L):
# 'a' ---> radius of the disk
# L ---> distance between the disk and the screen, in units of 'a'
# ka ---> 2pi/lambda *a
u = ka/L
# FIGYELEM: kulon-kulon kell integralni a valos es a kepzetes reszt a quad eljarassal
intre = quad(fr,0,1,args=(r,u))[0] # Here u is a parameter of function fr
intim = quad(fi,0,1,args=(r,u))[0] # Here u is a parameter of function fi
res= 1+1j*u*exp(1j*u*r**2/2)*(intre+1j*intim)
res=(abs(res))**2
return(res)
Cornu-spirál ¶
** Fresnel-integrálok ** $F(z) = \int_0^z d\eta e^{i \frac{\pi}{2}\eta^2} = C(z) + i S(z)$
$C(z) = \int_0^z d\eta \cos\left(i \frac{\pi}{2}\eta^2\right)$
$S(z) = \int_0^z d\eta \sin\left(i \frac{\pi}{2}\eta^2\right)$
In [7]:
zvec=linspace(-5,5,300)
figsize(14,8)
#figsize(xfig_meret,yfig_meret)
subplot(1,3,1,aspect=10)
plot(zvec,fresnel(zvec)[1],'r-')
xlabel('z',fontsize=15)
ylabel('C(z)',fontsize=15, rotation=0, labelpad=20)
grid();
subplot(1,3,2,aspect=10)
plot(zvec,fresnel(zvec)[0],'b-')
xlabel('z',fontsize=15)
ylabel('S(z)',fontsize=15, rotation=0, labelpad=20)
grid();
subplot(1,3,3,aspect=1)
plot(fresnel(zvec)[1],fresnel(zvec)[0],'g-')
xlabel('C',fontsize=15)
ylabel('S',fontsize=15, rotation=0, labelpad=20)
title('Cornu-spirál',fontsize=25)
grid();
tight_layout()
Fresnel-diffrakció féltéren (élen)¶
In [8]:
xvec=linspace(-3,5,500)
figsize(10,6)
#figsize(xfig_meret,yfig_meret)
plot(xvec,diffraction_el(xvec,1)[1])
xlabel(r'$X/\sqrt{\lambda L/2} $',fontsize=15)
ylabel('$I(X)={|U(p)|}^2$',fontsize=15, rotation=90, labelpad=20)
title('Fresnel-diffrakció féltéren (élen)')
axvline(0.,ls='--',color='r')
axhline(1.,ls='--',color='r')
grid();
Egy rés ¶
$U(x) = \frac{1}{\sqrt{2}}\, \left[F(\eta_+)-F(\eta_-) \right]$, ahol
$F(z)$ a Fresnel-integrál, $\eta_\pm = \pm \sqrt{2N_F} \left(\frac{1}{2} \mp \frac{x}{a} \right)$, $N_F = \frac{a^2}{\lambda z}$ a Fresnel-szám, $a$ a rés szélessége, $z$ a rés és az ernyő távolsága.
https://math.stackexchange.com/questions/1503415/diffraction-and-fresnel-integrals¶
In [9]:
def rajz_single_slit1(N_F,xm,Npoints):
#Npoints=500
#xm=3
xvec=linspace(-xm,xm,Npoints)
figsize(10,6)
#figsize(xfig_meret,yfig_meret)
plot(xvec,single_slit(xvec, N_F)[1])
xlabel(r'$x/a $',fontsize=15)
ylabel('$I(X)={|U(p)|}^2$',fontsize=15, rotation=90, labelpad=20)
title('Fresnel-diffrakció egy résen, Fresnel-szám $N_F=a^2/(\lambda L)$ ='
+str(around(N_F,2)))
plot(xvec,stepfn(1/2-xvec)*stepfn(xvec+1/2),'r-')
grid();
In [10]:
N_F = 20
xm = 1
Npoints =1000
rajz_single_slit1(N_F,xm,Npoints)
In [11]:
interact(rajz_single_slit1,
xm=fixed(1),
N_F=FloatSlider(min=0.0,max=50,step=1,value=20.,
description=r'Fresnel-szám, $N_F =$'),
#xm=FloatSlider(min=1,max=5,step=0.1,value=3,description='xm='),
Npoints=fixed(500));
interactive(children=(FloatSlider(value=20.0, description='Fresnel-szám, $N_F =$', max=50.0, step=1.0), Output…
In [12]:
def rajz_single_slit2(L,lam,xm,Npoints):
#Npoints=500
#xm=3
xvec=linspace(-xm,xm,Npoints)
a=1.0 # a res szelessege mm-ben
# lam, lambda nm egysegben
# L, a res es az ernyo tavolsaga az 'a' resszelesseg egysegben
N_F=a**2/lam/L*10**6 # Fresnel-szam
figsize(8,4)
#figsize(xfig_meret,yfig_meret)
plot(xvec,single_slit(xvec, N_F)[1])
xlabel(r'$x/a $',fontsize=15)
ylabel('$I(X)={|U(p)|}^2$',fontsize=15, rotation=90, labelpad=20)
title('Fresnel-diffrakció egy résen, Fresnel-szám $N_F=a^2/(\lambda L)$ = '
+str(around(N_F,2)))
plot(xvec,stepfn(1-xvec)*stepfn(xvec+1),'r-')
grid();
In [13]:
interact(rajz_single_slit2,
xm=fixed(2),
L=FloatSlider(min=0.0,max=600,step=50,value=300.,description='L(mm)='),
lam=FloatSlider(min=400.,max=800.,step=10.,value=500,
description=r'$\lambda=$ (nm)'),
#xm=FloatSlider(min=1,max=5,step=0.1,value=3,description='xm='),
Npoints=fixed(500));
interactive(children=(FloatSlider(value=300.0, description='L(mm)=', max=600.0, step=50.0), FloatSlider(value=…
In [14]:
a = 20/10**6 # radius of the disk in units of m
lam=550/10**9 # lambda in units of m
L = 5 # in units of a
print('a = ',a*10**3,'mm')
print('lambda = ',lam*10**9,'nm')
print('L = ',L,'*a \n')
ka=2*pi/lam*a
print('k*a = 2 pi/lambda*a = ',around(ka,2))
print('Intenzitas a korong szelen, I(r=a) =',around(ukorong(1,ka,L),4))
print('Intenzitas a korong kozepen, I(r=0) =',around(ukorong(0,ka,L),4))
rvec=linspace(0,3,300)
intvec=[]
[intvec.append(ukorong(r,ka,L)) for r in rvec]
figsize(10,6)
#figsize(xfig_meret,yfig_meret)
plot(rvec,intvec)
axvline(1.,ls='--',color='r')
axhline(1.,ls='--',color='r')
title('Poisson-folt', fontsize=16)
xlabel('$r/a$',fontsize=15)
ylabel('$I(X)={|U(p)|}^2$',fontsize=15, rotation=90, labelpad=20)
grid();
a = 0.02 mm lambda = 550.0 nm L = 5 *a k*a = 2 pi/lambda*a = 228.48 Intenzitas a korong szelen, I(r=a) = 0.2462 Intenzitas a korong kozepen, I(r=0) = 1.0
In [ ]: